一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

go語(yǔ)言標(biāo)準(zhǔn)庫(kù)net/url庫(kù)的過(guò)程

馬哥Linux運(yùn)維 ? 來(lái)源:博客園 ? 作者:博客園 ? 2022-05-07 15:41 ? 次閱讀

【導(dǎo)讀】本文是一篇學(xué)習(xí)筆記,記錄了作者學(xué)習(xí) go 語(yǔ)言標(biāo)準(zhǔn)庫(kù) net/url 庫(kù)的過(guò)程。

導(dǎo)入方式:

import "net/url"

		

url 包解析 URL 并實(shí)現(xiàn)了查詢的逸碼,參見(jiàn) RFC 3986。

func PathEscape

func PathEscape(s string) string

		

PathEscape 會(huì)將字符串轉(zhuǎn)義出來(lái),以便將其安全地放置在 URL 路徑段中。

func PathUnescape

func PathUnescape(s string) (string, error


		

PathUnescape 執(zhí)行 PathEscape 的逆轉(zhuǎn)換,將 %AB 轉(zhuǎn)換為字節(jié) 0xAB 。如果任何 % 之后沒(méi)有兩個(gè)十六進(jìn)制數(shù)字,它將返回一個(gè)錯(cuò)誤。

PathUnescape 與 QueryUnescape 相同,只是它不會(huì)將'+'改為''(空格)。

func QueryEscape

func QueryEscape(s string) string

		

QueryEscape 函數(shù)對(duì) s 進(jìn)行轉(zhuǎn)碼使之可以安全的用在 URL 查詢里。

func QueryUnescape

func QueryUnescape(s string) (string, error)

		

QueryUnescape 函數(shù)用于將 QueryEscape 轉(zhuǎn)碼的字符串還原。它會(huì)把%AB 改為字節(jié) 0xAB,將'+'改為' '。如果有某個(gè)%后面未跟兩個(gè)十六進(jìn)制數(shù)字,本函數(shù)會(huì)返回錯(cuò)誤。

舉例:

package main import(    "fmt"    "encoding/base64"    "net/url"    "crypto/rand"    "io"    "log")
//sessionId 函數(shù)用來(lái)生成一個(gè) session ID,即 session 的唯一標(biāo)識(shí)符func sessionId() string {    b := make([]byte, 32)    //ReadFull 從 rand.Reader 精確地讀取 len(b) 字節(jié)數(shù)據(jù)填充進(jìn) b    //rand.Reader 是一個(gè)全局、共享的密碼用強(qiáng)隨機(jī)數(shù)生成器    if _, err := io.ReadFull(rand.Reader, b); err != nil {         return ""    }    fmt.Println(b) //[238 246 235 166 48 196 157 143 123 140 241 200 213 113 247 168 219 132 208 163 223 24 72 162 114 30 175 205 176 117 139 118]    return base64.URLEncoding.EncodeToString(b)//將生成的隨機(jī)數(shù) b 編碼后返回字符串,該值則作為 session ID}func main() {     sessionId := sessionId()     fmt.Println(sessionId) //7vbrpjDEnY97jPHI1XH3qNuE0KPfGEiich6vzbB1i3Y=    encodedSessionId := url.QueryEscape(sessionId) //對(duì) sessionId 進(jìn)行轉(zhuǎn)碼使之可以安全的用在 URL 查詢里    fmt.Println(encodedSessionId) //7vbrpjDEnY97jPHI1XH3qNuE0KPfGEiich6vzbB1i3Y%3D    decodedSessionId, err := url.QueryUnescape(encodedSessionId) //將 QueryEscape 轉(zhuǎn)碼的字符串還原    if err != nil {        log.Fatal(err)    }    fmt.Println(decodedSessionId) //7vbrpjDEnY97jPHI1XH3qNuE0KPfGEiich6vzbB1i3Y=}

		

type URL

type URL struct {    Scheme   string    //具體指訪問(wèn)服務(wù)器上的資源使用的哪種協(xié)議    Opaque   string    // 編碼后的不透明數(shù)據(jù)    User     *Userinfo // 用戶名和密碼信息,有些協(xié)議需要傳入明文用戶名和密碼來(lái)獲取資源,比如 FTP    Host     string    // host 或 host:port,服務(wù)器地址,可以是 IP 地址,也可以是域名信息    Path     string  //路徑,使用"/"分隔    RawQuery string // 編碼后的查詢字符串,沒(méi)有'?'    Fragment string // 引用的片段(文檔位置),沒(méi)有'#'}

		

URL 類型代表一個(gè)解析后的 URL(或者說(shuō),一個(gè) URL 參照)。URL 基本格式如下:

scheme://[userinfo@]host/path[?query][#fragment]

		

scheme 后不是冒號(hào)加雙斜線的 URL 被解釋為如下格式:

scheme:opaque[?query][#fragment]

		

注意路徑字段是以解碼后的格式保存的,如/%47%6f%2f 會(huì)變成/Go/。這導(dǎo)致我們無(wú)法確定 Path 字段中的斜線是來(lái)自原始 URL 還是解碼前的%2f。除非一個(gè)客戶端必須使用其他程序/函數(shù)來(lái)解析原始 URL 或者重構(gòu)原始 URL,這個(gè)區(qū)別并不重要。此時(shí),HTTP 服務(wù)端可以查詢 req.RequestURI,而 HTTP 客戶端可以使用 URL{Host: "example.com", Opaque: "http://example.com/Go%2f"}代替{Host: "example.com", Path: "/Go/"}。

func Parse

func Parse(rawurl string) (url *URL, err error)

		

Parse 函數(shù)解析 rawurl 為一個(gè) URL 結(jié)構(gòu)體,rawurl 可以是絕對(duì)地址,也可以是相對(duì)地址。

func ParseRequestURI

func ParseRequestURI(rawurl string) (url *URL, err error)

		

ParseRequestURI 函數(shù)解析 rawurl 為一個(gè) URL 結(jié)構(gòu)體,本函數(shù)會(huì)假設(shè) rawurl 是在一個(gè) HTTP 請(qǐng)求里,因此會(huì)假設(shè)該參數(shù)是一個(gè)絕對(duì) URL 或者絕對(duì)路徑,并會(huì)假設(shè)該 URL 沒(méi)有#fragment 后綴。(網(wǎng)頁(yè)瀏覽器會(huì)在去掉該后綴后才將網(wǎng)址發(fā)送到網(wǎng)頁(yè)服務(wù)器)

func (*URL) IsAbs

func (u *URL) IsAbs() bool

		

函數(shù)在 URL 是絕對(duì) URL 時(shí)才返回真。

舉例:

package main import(    "fmt"    "net/url")
func main() {     u := url.URL{Host: "example.com", Path: "foo"}    fmt.Println(u.IsAbs()) //false    u.Scheme = "http"    fmt.Println(u.IsAbs()) //true}

		

func (*URL) Query

func (u *URL) Query() Values

		

Query 方法解析 RawQuery 字段并返回其表示的 Values 類型鍵值對(duì)。

舉例:

package main import(    "fmt"    "net/url")
func main() {     u := &url.URL{        Scheme:   "https",        User:     url.UserPassword("me", "pass"),        Host:     "example.com",        Path:     "foo/bar",        RawQuery: "x=1&y=2",        Fragment: "anchor",    }    fmt.Println(u.Query()) //map[x:[1] y:[2]]}

		

func (*URL) RequestURI

func (u *URL) RequestURI() string

		

RequestURI 方法返回編碼好的 path?query 或 opaque?query 字符串,用在 HTTP 請(qǐng)求里。

package main import(    "fmt"    "net/url"    "log")
func main() {     u, err := url.Parse("https://example.org/path?foo=bar")    if err != nil {        log.Fatal(err)    }    fmt.Println(u.RequestURI()) ///path?foo=bar}

		

func (*URL) String

func (u *URL) String() string

		

String 將 URL 重構(gòu)為一個(gè)合法 URL 字符串。

字符串將 URL 重組為一個(gè)有效的 URL 字符串。結(jié)果的一般形式是以下之一:

scheme:opaque?query#fragmentscheme://userinfo@host/path?query#fragment

		

如果 u.Opaque 不為空,則 String 使用第一種形式;否則它使用第二種形式。要獲取路徑,String 使用 u.EscapedPath() 。

在第二種形式中,適用下列規(guī)則:

- if u.Scheme is empty, scheme: is omitted.- if u.User is nil, userinfo@ is omitted.- if u.Host is empty, host/ is omitted.- if u.Scheme and u.Host are empty and u.User is nil,   the entire scheme://userinfo@host/ is omitted.- if u.Host is non-empty and u.Path begins with a /,   the form host/path does not add its own /.- if u.RawQuery is empty, ?query is omitted.- if u.Fragment is empty, #fragment is omitted.

		

舉例:

package main import(    "fmt"    "net/url")
func main() {     u := &url.URL{        Scheme:   "https",        User:     url.UserPassword("me", "pass"),        Host:     "example.com",        Path:     "foo/bar",        RawQuery: "x=1&y=2",        Fragment: "anchor",    }    //這是第一種形式    fmt.Println(u.String()) //https://me:pass@example.com/foo/bar?x=1&y=2#anchor    u.Opaque = "opaque"    //這是第二種形式    fmt.Println(u.String()) //https:opaque?x=1&y=2#anchor}

		

func (*URL) EscapedPath

func (u *URL) EscapedPath() string

		

EscapedPath 返回 u.Path 的轉(zhuǎn)義形式。一般來(lái)說(shuō),任何路徑都有多種可能的轉(zhuǎn)義形式。EscapedPath 在 u.Path 有效轉(zhuǎn)義時(shí)返回 u.RawPath 。否則,EscapedPath 將忽略 u.RawPath 并自行計(jì)算轉(zhuǎn)義表單。String 和 RequestURI 方法使用 EscapedPath 來(lái)構(gòu)造它們的結(jié)果。通常,代碼應(yīng)該調(diào)用 EscapedPath ,而不是直接讀取 u.RawPath 。

舉例:

package main import(    "fmt"    "net/url"    "log")
func main() {     u, err := url.Parse("http://example.com/path with spaces")    if err != nil {        log.Fatal(err)    }    fmt.Println(u.EscapedPath()) ///path%20with%20spaces}

		

func (*URL) Hostname

func (u *URL) Hostname() string

		

主機(jī)名返回 u.Host ,沒(méi)有任何端口號(hào)。

如果主機(jī)是具有端口號(hào)的 IPv6 文本,則主機(jī)名將返回不帶方括號(hào)的 IPv6 文字。IPv6 文字可能包含區(qū)域標(biāo)識(shí)符。

舉例:

package main import(    "fmt"    "net/url"    "log")
func main() {     u, err := url.Parse("https://example.org:8000/path")//IPV4    if err != nil {        log.Fatal(err)    }    fmt.Println(u.Hostname()) //example.org
    u, err = url.Parse("https://[200185a300000370:7334]:17000") //IPV6    if err != nil {        log.Fatal(err)    }    fmt.Println(u.Hostname())//200185a300000370:7334}

		

func (*URL) Port

func (u *URL) Port() string

		

Port 返回 u.Host 的端口部分,不帶前導(dǎo)冒號(hào)。如果 u.Host 不包含端口,則 Port 返回空字符串。

func (*URL) Parse

func (u *URL) Parse(ref string) (*URL, error)

		

Parse 方法以 u 為上下文來(lái)解析一個(gè) URL,ref 可以是絕對(duì)或相對(duì) URL。

本方法解析失敗會(huì)返回 nil, err;否則返回結(jié)果和 ResolveReference 一致。

舉例:

package main import(    "fmt"    "net/url"    "log")
func main() {     base, err := url.Parse("http://example.com/directory/")    if err != nil {        log.Fatal(err)    }    fmt.Println(base)    result, err := base.Parse("./search?q=dotnet")    if err != nil {        log.Fatal(err)    }    fmt.Println(result)}

		

返回:

bogon:~ user$ go run testGo.go http://example.com/directory/http://example.com/directory/search?q=dotnet

		

func (*URL) ResolveReference

func (u *URL) ResolveReference(ref *URL) *URL

		

本方法根據(jù)一個(gè)絕對(duì) URI 將一個(gè) URI 補(bǔ)全為一個(gè)絕對(duì) URI,參見(jiàn) RFC 3986 節(jié) 5.2。參數(shù) ref 可以是絕對(duì) URI 或者相對(duì) URI。ResolveReference 總是返回一個(gè)新的 URL 實(shí)例,即使該實(shí)例和 u 或者 ref 完全一樣。如果 ref 是絕對(duì) URI,本方法會(huì)忽略參照 URI 并返回 ref 的一個(gè)拷貝。

舉例:

當(dāng) ref 是相對(duì)路徑,則其將會(huì)相對(duì)于 u 來(lái)得到其的絕對(duì)路徑:

package main import(    "fmt"    "net/url"    "log")
func main() {   //該相對(duì)路徑的意思是    u, err := url.Parse("../../..//search?q=dotnet")//相對(duì)路徑的不同會(huì)影響返回的結(jié)果    if err != nil {        log.Fatal(err)    }    fmt.Println(u)    base, err := url.Parse("http://example.com/directory/")    if err != nil {        log.Fatal(err)    }    fmt.Println(base)    fmt.Println(base.ResolveReference(u))}

		

返回:

bogon:~ user$ go run testGo.go ../../..//search?q=dotnethttp://example.com/directory/http://example.com/search?q=dotnet

		

如果相對(duì)路徑為。./..//search?q=dotnet,返回結(jié)果是相同的,即 http://example.com/search?q=dotnet

但是如果相對(duì)路徑為。.//search?q=dotnet,將返回 http://example.com//search?q=dotnet,這并不是我們想要的結(jié)果。如果想要相對(duì)于 directory 目錄,則相對(duì)路徑寫成。/search?q=dotnet

func (u *URL) MarshalBinary() (text []byte, err error)

func (u *URL) MarshalBinary() (text []byte, err error)

		

舉例:

package main import(    "fmt"    "net/url"    "log"    "reflect")
func main() {     u, _ := url.Parse("https://example.org")    b, err := u.MarshalBinary() //將其轉(zhuǎn)成二進(jìn)制    if err != nil {        log.Fatal(err)    }    fmt.Println(reflect.TypeOf(b)) //[]uint8    fmt.Println(b) //[104 116 116 112 115 58 47 47 101 120 97 109 112 108 101 46 111 114 103]    fmt.Printf("%s
", b) //https://example.org}

		

func (*URL) UnmarshalBinary

func (u *URL) UnmarshalBinary(text []byte) error

		

舉例:

package main import(    "fmt"    "net/url"    "log"    "reflect")
func main() {     u := &url.URL{}    //將其從二進(jìn)制轉(zhuǎn)成 url.URL 類型    err := u.UnmarshalBinary([]byte("https://example.org:8000/foo"))    if err != nil {        log.Fatal(err)    }    fmt.Println(reflect.TypeOf(u)) //*url.URL    fmt.Println(u) //https://example.org:8000/foo    fmt.Println(u.Hostname()) //example.org    fmt.Println(u.Port()) //8000
}

		

type Userinfo

type Userinfo struct {    // 內(nèi)含隱藏或非導(dǎo)出字段}

		

Userinfo 類型是一個(gè) URL 的用戶名和密碼細(xì)節(jié)的一個(gè)不可修改的封裝。一個(gè)真實(shí)存在的 Userinfo 值必須保證有用戶名(但根據(jù) RFC 2396 可以是空字符串)以及一個(gè)可選的密碼。

func User

func User(username string) *Userinfo

		

User 函數(shù)返回一個(gè)用戶名設(shè)置為 username 的不設(shè)置密碼的* Userinfo。

func UserPassword

func UserPassword(username, password string) *Userinfo

		

UserPassword 函數(shù)返回一個(gè)用戶名設(shè)置為 username、密碼設(shè)置為 password 的* Userinfo。

這個(gè)函數(shù)應(yīng)該只用于老式的站點(diǎn),因?yàn)轱L(fēng)險(xiǎn)很大,不建議使用,參見(jiàn) RFC 2396。

func (*Userinfo) Username

func (u *Userinfo) Username() string

		

Username 方法返回用戶名。

func (*Userinfo) Password

func (u *Userinfo) Password() (string, bool)

		

如果設(shè)置了密碼返回密碼和真,否則會(huì)返回假。

func (*Userinfo) String

func (u *Userinfo) String() string

		

String 方法返回編碼后的用戶信息,格式為"username[:password]"。

舉例:

package main import(    "fmt"    "net/url"    "log")
func main() {     u := &url.URL{        Scheme:   "https",        User:     url.UserPassword("me", "pass"),        Host:     "example.com",        Path:     "foo/bar",        RawQuery: "x=1&y=2",        Fragment: "anchor",    }    fmt.Println(u.User.Username()) //me    password, b := u.User.Password()    if b == false{        log.Fatal("can not get password")    }    fmt.Println(password) //pass    fmt.Println(u.User.String()) //me:pass
}

		

type Values

type Values map[string][]string

		

Values 將建映射到值的列表。它一般用于查詢的參數(shù)和表單的屬性。不同于 http.Header 這個(gè)字典類型,Values 的鍵是大小寫敏感的。

func ParseQuery

func ParseQuery(query string) (m Values, err error)

		

ParseQuery 函數(shù)解析一個(gè) URL 編碼的查詢字符串,并返回可以表示該查詢的 Values 類型的字典。本函數(shù)總是返回一個(gè)包含了所有合法查詢參數(shù)的非 nil 字典,err 用來(lái)描述解碼時(shí)遇到的(如果有)第一個(gè)錯(cuò)誤。

舉例:

package main import(    "fmt"    "net/url"    "log")
func main() {     v, err := url.ParseQuery("friend=Jess&friend=Sarah&fruit=apple&name=Ava")    if err != nil {        log.Fatal(err)    }    fmt.Println(v) //map[friend:[Jess Sarah] fruit:[apple] name:[Ava]]}

		

func (Values) Get

func (v Values) Get(key string) string

		

Get 會(huì)獲取 key 對(duì)應(yīng)的值集的第一個(gè)值。如果沒(méi)有對(duì)應(yīng) key 的值集會(huì)返回空字符串。獲取值集請(qǐng)直接用 map。

func (Values) Set

func (v Values) Set(key, value string)

		

Set 方法將 key 對(duì)應(yīng)的值集設(shè)為只有 value,它會(huì)替換掉已有的值集。

func (Values) Add

func (v Values) Add(key, value string)

		

Add 將 value 添加到 key 關(guān)聯(lián)的值集里原有的值的后面。

func (Values) Del


		
func(vValues)Del(keystring)

		
Del 刪除 key 關(guān)聯(lián)的值集。

func (Values) Encode

func (v Values) Encode() string

		

Encode 方法將 v 編碼為 url 編碼格式 ("bar=baz&foo=quux"),編碼時(shí)會(huì)以鍵進(jìn)行排序。

舉例:

package main import(    "fmt"    "net/url")
func main() {     v := url.Values{}    v.Set("name", "Ava")    v.Add("friend", "Jess")    v.Add("friend", "Sarah")    v.Add("fruit", "apple")
    fmt.Println(v.Get("name"))    fmt.Println(v.Get("friend"))    fmt.Println(v["friend"])    fmt.Println(v.Encode())
    v.Del("name")    fmt.Println(v.Encode())}

		

返回:

bogon:~ user$ go run testGo.go AvaJess[Jess Sarah]friend=Jess&friend=Sarah&fruit=apple&name=Avafriend=Jess&friend=Sarah&fruit=apple

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4365

    瀏覽量

    63852
  • 十六進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    32

    瀏覽量

    38158
  • go語(yǔ)言
    +關(guān)注

    關(guān)注

    1

    文章

    158

    瀏覽量

    9242

原文標(biāo)題:go 標(biāo)準(zhǔn)庫(kù) net/url 學(xué)習(xí)筆記

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    概倫電子標(biāo)準(zhǔn)單元庫(kù)驗(yàn)證解決方案LibWiz介紹

    隨著半導(dǎo)體工藝技術(shù)節(jié)點(diǎn)的日益成熟和復(fù)雜,在芯片設(shè)計(jì)過(guò)程中需要提供各種復(fù)雜的標(biāo)準(zhǔn)單元庫(kù)。多種庫(kù)之間的一致性和有效性必須得到保證,以消除不必要的設(shè)計(jì)延遲。
    的頭像 發(fā)表于 04-16 09:54 ?105次閱讀
    概倫電子<b class='flag-5'>標(biāo)準(zhǔn)</b>單元<b class='flag-5'>庫(kù)</b>驗(yàn)證解決方案LibWiz介紹

    嘉立創(chuàng)標(biāo)準(zhǔn)集成庫(kù)(原理圖庫(kù),pcb庫(kù)

    這個(gè)PCB庫(kù)是嘉立創(chuàng)的標(biāo)準(zhǔn)集成庫(kù),使包含了一些常用元件和封裝,使用本集成庫(kù)進(jìn)行設(shè)計(jì)的pcb在嘉立創(chuàng)進(jìn)行投板時(shí)不用進(jìn)行元件方向和位置的確認(rèn),節(jié)約成本和時(shí)間。
    發(fā)表于 04-09 13:59

    HAL庫(kù)標(biāo)準(zhǔn)庫(kù)你會(huì)選擇哪種庫(kù)?

    HAL庫(kù)標(biāo)準(zhǔn)庫(kù)你會(huì)選擇哪種庫(kù)
    發(fā)表于 03-10 06:25

    云數(shù)據(jù)庫(kù)是哪種數(shù)據(jù)庫(kù)類型?

    云數(shù)據(jù)庫(kù)是一種部署在虛擬計(jì)算環(huán)境中的數(shù)據(jù)庫(kù),它融合了云計(jì)算的彈性和可擴(kuò)展性,為用戶提供高效、靈活的數(shù)據(jù)庫(kù)服務(wù)。云數(shù)據(jù)庫(kù)主要分為兩大類:關(guān)系型數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 01-07 10:22 ?336次閱讀

    HAL庫(kù)在Arduino平臺(tái)上的使用

    ,適合于快速原型開(kāi)發(fā)和教育。HAL(硬件抽象層)庫(kù)是一種在Arduino平臺(tái)上使用的軟件庫(kù),它提供了一種標(biāo)準(zhǔn)化的方式來(lái)訪問(wèn)硬件功能,使得開(kāi)發(fā)者可以編寫更通用、更可移植的代碼。 1. 什么是HAL
    的頭像 發(fā)表于 12-02 14:04 ?1207次閱讀

    HAL庫(kù)標(biāo)準(zhǔn)庫(kù)的區(qū)別 HAL庫(kù)與CMSIS的關(guān)系

    在嵌入式系統(tǒng)開(kāi)發(fā)中,HAL(硬件抽象層)庫(kù)標(biāo)準(zhǔn)庫(kù)是兩種常用的軟件庫(kù),它們?cè)诠δ芎褪褂脠?chǎng)景上有所不同。 1. 標(biāo)準(zhǔn)
    的頭像 發(fā)表于 12-02 14:02 ?2623次閱讀

    如何快速入門HAL庫(kù)編程 HAL庫(kù)與裸機(jī)編程的比較

    如何快速入門HAL庫(kù)編程 要快速入門HAL庫(kù)編程,可以遵循以下步驟: 了解基礎(chǔ)知識(shí) : 掌握C語(yǔ)言編程基礎(chǔ),包括變量、數(shù)據(jù)類型、函數(shù)、指針等。 了解嵌入式系統(tǒng)的基本概念,如微控制器、中斷、外設(shè)等
    的頭像 發(fā)表于 12-02 11:39 ?885次閱讀

    在學(xué)習(xí)go語(yǔ)言過(guò)程踩過(guò)的坑

    作為一個(gè)5年的phper,這兩年公司和個(gè)人都在順應(yīng)技術(shù)趨勢(shì),新項(xiàng)目慢慢從php轉(zhuǎn)向了go語(yǔ)言,從2021年到現(xiàn)在,筆者手上也先后開(kāi)發(fā)了兩個(gè)go項(xiàng)目。在學(xué)習(xí)go
    的頭像 發(fā)表于 11-11 09:22 ?354次閱讀

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—通過(guò)拼接數(shù)據(jù)庫(kù)碎片恢復(fù)SQLserver數(shù)據(jù)庫(kù)

    一個(gè)運(yùn)行在存儲(chǔ)上的SQLServer數(shù)據(jù)庫(kù),有1000多個(gè)文件,大小幾十TB。數(shù)據(jù)庫(kù)每10天生成一個(gè)NDF文件,每個(gè)NDF幾百GB大小。數(shù)據(jù)庫(kù)包含兩個(gè)LDF文件。 存儲(chǔ)損壞,數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 10-31 13:21 ?540次閱讀
    數(shù)據(jù)<b class='flag-5'>庫(kù)</b>數(shù)據(jù)恢復(fù)—通過(guò)拼接數(shù)據(jù)<b class='flag-5'>庫(kù)</b>碎片恢復(fù)SQLserver數(shù)據(jù)<b class='flag-5'>庫(kù)</b>

    go語(yǔ)言如何解決并發(fā)問(wèn)題

    作為一個(gè)后端開(kāi)發(fā),日常工作中接觸最多的兩門語(yǔ)言就是PHP和GO了。無(wú)可否認(rèn),PHP確實(shí)是最好的語(yǔ)言(手動(dòng)狗頭哈哈),寫起來(lái)真的很舒爽,沒(méi)有任何心智負(fù)擔(dān),字符串和整型壓根就不用區(qū)分,開(kāi)發(fā)速度真的是比
    的頭像 發(fā)表于 10-23 13:38 ?347次閱讀
    <b class='flag-5'>go</b><b class='flag-5'>語(yǔ)言</b>如何解決并發(fā)問(wèn)題

    一種常用嵌入式開(kāi)發(fā)代碼庫(kù)

    使用開(kāi)源協(xié)議:GPL-2.0varch簡(jiǎn)介varch(we-architecture,意為我們的框架庫(kù))是嵌入式C語(yǔ)言常用代碼模塊庫(kù),包含了嵌入式中常用的算法庫(kù),數(shù)據(jù)結(jié)構(gòu)(容器)庫(kù),解
    的頭像 發(fā)表于 09-04 08:06 ?715次閱讀
    一種常用嵌入式開(kāi)發(fā)代碼<b class='flag-5'>庫(kù)</b>

    擺脫自建庫(kù)的繁瑣,EDA元件庫(kù)轉(zhuǎn)cadence原理圖封裝庫(kù)實(shí)戰(zhàn)技巧

    擺脫自建庫(kù)的繁瑣,EDA元件庫(kù)轉(zhuǎn)cadence原理圖封裝庫(kù)實(shí)戰(zhàn)技巧
    的頭像 發(fā)表于 08-24 12:29 ?5049次閱讀
    擺脫自建<b class='flag-5'>庫(kù)</b>的繁瑣,EDA元件<b class='flag-5'>庫(kù)</b>轉(zhuǎn)cadence原理圖封裝<b class='flag-5'>庫(kù)</b>實(shí)戰(zhàn)技巧

    深度學(xué)習(xí)常用的Python庫(kù)

    深度學(xué)習(xí)作為人工智能的一個(gè)重要分支,通過(guò)模擬人類大腦中的神經(jīng)網(wǎng)絡(luò)來(lái)解決復(fù)雜問(wèn)題。Python作為一種流行的編程語(yǔ)言,憑借其簡(jiǎn)潔的語(yǔ)法和豐富的庫(kù)支持,成為了深度學(xué)習(xí)研究和應(yīng)用的首選工具。本文將深入探討
    的頭像 發(fā)表于 07-03 16:04 ?973次閱讀

    STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)參考手冊(cè)

    STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)參考手冊(cè)
    發(fā)表于 06-24 09:26 ?12次下載

    請(qǐng)問(wèn)STVD+Cosmic有沒(méi)有自己的C語(yǔ)言庫(kù)?

    我自己安裝的STVD+Cosmic,找不到自己的C語(yǔ)言庫(kù),好多函數(shù)都不能調(diào)用,從網(wǎng)上下載的庫(kù)調(diào)用的時(shí)候會(huì)報(bào)很多錯(cuò)誤,
    發(fā)表于 05-14 06:30