go語言一天入門(下)

結構體

和c一樣

package mainimport "fmt"type Books struct {title stringauthor stringsubject stringbook_id int
}func main() {// 創建一個新的結構體fmt.Println(Books{"Go 語言", "www.runoob.com", "Go 語言教程", 6495407})// 也可以使用 key => value 格式fmt.Println(Books{title: "Go 語言", author: "www.runoob.com", subject: "Go 語言教程", book_id: 6495407})// 忽略的字段為 0 或 空fmt.Println(Books{title: "Go 語言", author: "www.runoob.com"})
}
{Go 語言 www.runoob.com Go 語言教程 6495407}
{Go 語言 www.runoob.com Go 語言教程 6495407}
{Go 語言 www.runoob.com  0}

結構體指針,函數傳參

package mainimport "fmt"type Books struct {title stringauthor stringsubject stringbook_id int
}func main() {var Book1 Books        /* Declare Book1 of type Book */var Book2 Books        /* Declare Book2 of type Book *//* book 1 描述 */Book1.title = "Go 語言"Book1.author = "www.runoob.com"Book1.subject = "Go 語言教程"Book1.book_id = 6495407/* book 2 描述 */Book2.title = "Python 教程"Book2.author = "www.runoob.com"Book2.subject = "Python 語言教程"Book2.book_id = 6495700/* 打印 Book1 信息 */printBook(&Book1)/* 打印 Book2 信息 */printBook(&Book2)
}
func printBook( book *Books ) {fmt.Printf( "Book title : %s\n", book.title)fmt.Printf( "Book author : %s\n", book.author)fmt.Printf( "Book subject : %s\n", book.subject)fmt.Printf( "Book book_id : %d\n", book.book_id)
}
Book title : Go 語言
Book author : www.runoob.com
Book subject : Go 語言教程
Book book_id : 6495407
Book title : Python 教程
Book author : www.runoob.com
Book subject : Python 語言教程
Book book_id : 6495700

切片

和py一樣。

package mainimport "fmt"func main() {var numbers []intprintSlice(numbers)/* 允許追加空切片 */numbers = append(numbers, 0)printSlice(numbers)/* 向切片添加一個元素 */numbers = append(numbers, 1)printSlice(numbers)/* 同時添加多個元素 */numbers = append(numbers, 2,3,4)printSlice(numbers)/* 創建切片 numbers1 是之前切片的兩倍容量*/numbers1 := make([]int, len(numbers), (cap(numbers))*2)/* 拷貝 numbers 的內容到 numbers1 */copy(numbers1,numbers)printSlice(numbers1)   
}func printSlice(x []int){fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
/*
len=0 cap=0 slice=[]
len=1 cap=1 slice=[0]
len=2 cap=2 slice=[0 1]
len=5 cap=6 slice=[0 1 2 3 4]
len=5 cap=12 slice=[0 1 2 3 4]
*/

range

range 關鍵字用于 for 循環中迭代數組(array)、切片(slice)、通道(channel)或集合(map)的元素。在數組和切片中它返回元素的索引和索引對應的值,在集合中返回 key-value 對。

package main
import "fmt"
func main() {//這是我們使用range去求一個slice的和。使用數組跟這個很類似nums := []int{2, 3, 4}sum := 0for _, num := range nums {sum += num}fmt.Println("sum:", sum)//在數組上使用range將傳入index和值兩個變量。上面那個例子我們不需要使用該元素的序號,所以我們使用空白符"_"省略了。有時侯我們確實需要知道它的索引。for i, num := range nums {if num == 3 {fmt.Println("index:", i)}}//range也可以用在map的鍵值對上。kvs := map[string]string{"a": "apple", "b": "banana"}for k, v := range kvs {fmt.Printf("%s -> %s\n", k, v)}//range也可以用來枚舉Unicode字符串。第一個參數是字符的索引,第二個是字符(Unicode的值)本身。for i, c := range "go" {fmt.Println(i, c)}
}

?

sum: 9
index: 1
a -> apple
b -> banana
0 103
1 111

map

可以使用內建函數 make 也可以使用 map 關鍵字來定義 Map:

/* 聲明變量,默認 map 是 nil */
var map_variable map[key_data_type]value_data_type/* 使用 make 函數 */
map_variable := make(map[key_data_type]value_data_type)

如果不初始化 map,那么就會創建一個 nil map。nil map 不能用來存放鍵值對

package mainimport "fmt"func main() {var countryCapitalMap map[string]string /*創建集合 */countryCapitalMap = make(map[string]string)/* map插入key - value對,各個國家對應的首都 */countryCapitalMap [ "France" ] = "巴黎"countryCapitalMap [ "Italy" ] = "羅馬"countryCapitalMap [ "Japan" ] = "東京"countryCapitalMap [ "India " ] = "新德里"/*使用鍵輸出地圖值 */ for country := range countryCapitalMap {fmt.Println(country, "首都是", countryCapitalMap [country])}/*查看元素在集合中是否存在 */capital, ok := countryCapitalMap [ "American" ] /*如果確定是真實的,則存在,否則不存在 *//*fmt.Println(capital) *//*fmt.Println(ok) */if (ok) {fmt.Println("American 的首都是", capital)} else {fmt.Println("American 的首都不存在")}
}
France 首都是 巴黎
Italy 首都是 羅馬
Japan 首都是 東京
India  首都是 新德里
American 的首都不存在

注:刪除:delete(countryCapitalMap, "France")

語言類型轉換

類型轉換用于將一種數據類型的變量轉換為另外一種類型的變量。Go 語言類型轉換基本格式如下:

type_name(expression)

type_name 為類型,expression 為表達式。

如float32(5)等。

接口實例

package mainimport ("fmt"
)type Phone interface {call()
}type NokiaPhone struct {
}func (nokiaPhone NokiaPhone) call() {fmt.Println("I am Nokia, I can call you!")
}type IPhone struct {
}func (iPhone IPhone) call() {fmt.Println("I am iPhone, I can call you!")
}func main() {var phone Phonephone = new(NokiaPhone)phone.call()phone = new(IPhone)phone.call()}

在上面的例子中,我們定義了一個接口Phone,接口里面有一個方法call()。然后我們在main函數里面定義了一個Phone類型變量,并分別為之賦值為NokiaPhone和IPhone。然后調用call()方法,輸出結果如下:

I am Nokia, I can call you!
I am iPhone, I can call you!

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444055.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444055.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444055.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖的遍歷算法【數據結構F】

圖的遍歷算法有哪兩種? 深度優先調度算法---------將圖結構看成是樹形結構,樹形結構的子圖直接是沒有交叉的,但是對于圖結構的樹形結構之間是有交叉的,類比于樹形結構的二叉樹,左指數和右指數都會相應的經歷三次&#…

go語言快速刷《程序員面試金典》(1)

實現一個算法,確定一個字符串 s 的所有字符是否全都不同。 一個數組統計是否有 func isUnique(astr string) bool {var arr[26] int;for _,ch:range astr{num:ch-aif(arr[num]1){return false}arr[num]}return true } 給定兩個字符串 s1 和 s2,請編寫一…

最小生成樹【數據結構】

前提 【1】網的最小生成樹,涉及到生成樹了那么就會有最小的權值在里面了 【2】對于一個圖來說生成樹是由多個的,并不是唯一的 【3】:廣度優先算法的遍歷是可以得到生成樹的,深度優先算法也是可以得到生成樹的 任意的一個聯通網&am…

go語言快速刷《程序員面試金典》(2)

字符串輪轉。給定兩個字符串s1和s2,請編寫代碼檢查s2是否為s1旋轉而成(比如,waterbottle是erbottlewat旋轉后的字符串)。 示例1 輸入:s1 "waterbottle", s2 "erbottlewat" 輸出:T…

廣義表的基本概念【數據結構】

實名廣義表與匿名廣義表的區別:對于匿名的廣義表的表示方法我們認為一對括號就是一個廣義表,里面的數據可以是廣義表也可以是 原子,對于有名字的廣義表,也就是大寫的字母我們可以直接認為大寫的就是廣義表的表示方法小練習----廣義…

go語言快速刷《程序員面試金典》(3)

編寫程序以 x 為基準分割鏈表,使得所有小于 x 的節點排在大于或等于 x 的節點之前。如果鏈表中包含 x,x 只需出現在小于 x 的元素之后(如下所示)。分割元素 x 只需處于“右半部分”即可,其不需要被置于左右兩部分之間。 示例: 輸入: head …

樹和二叉樹【數據結構】

基本概念 ADT的定義 基本操作 對比樹形結構和線性結構 基本術語以及注意事項-不能錯誤簡單的我以為 二叉樹是度數小于等于2的樹,而不是度為2的樹,一定要記住這個概念 小知識:二進制轉換成為十進制的方法名稱叫做位權求和法,用到…

leetcode557. 反轉字符串中的單詞 III python,處理字符串的神!

給定一個字符串,你需要反轉字符串中每個單詞的字符順序,同時仍保留空格和單詞的初始順序。 示例 1: 輸入: "Lets take LeetCode contest" 輸出: "steL ekat edoCteeL tsetnoc" 注意:在字符串中,每個單詞由…

數據庫2.1.1mysql的特點

在mysql5.1當中,mysqlab公司引入了新的插件式存儲引擎體系結構,也許將存儲引擎加載到正在運行的mysql服務器當中,使用mysql插件是存儲引擎體系結構允許數據庫用戶為特定的應用需求選擇專門的存儲引擎,完全不需要管理任何特殊的應用…

leetcode369. 給單鏈表加一

用一個 非空 單鏈表來表示一個非負整數,然后將這個整數加一。 你可以假設這個整數除了 0 本身,沒有任何前導的 0。 這個整數的各個數位按照 高位在鏈表頭部、低位在鏈表尾部 的順序排列。 示例: 輸入: [1,2,3] 輸出: [1,2,4] 思路: hel…

MySQL常見的兩種存儲引擎:MyISAM與InnoDB的愛恨情仇

一 MyISAM 1.1 MyISAM簡介 MyISAM是MySQL的默認數據庫引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的順序訪問方法)所改良。雖然性能極佳,而且提供了大量的特性&a…

leetcode193. 有效電話號碼 正則了解一下

給定一個包含電話號碼列表(一行一個電話號碼)的文本文件 file.txt,寫一個 bash 腳本輸出所有有效的電話號碼。 你可以假設一個有效的電話號碼必須滿足以下兩種格式: (xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一個數字…

leetcode258. 各位相加

給定一個非負整數 num,反復將各個位上的數字相加,直到結果為一位數。 示例: 輸入: 38 輸出: 2 解釋: 各位相加的過程為:3 8 11, 1 1 2。 由于 2 是一位數,所以返回 2。 進階: 你可以不使用循環或者遞歸,且在 O(…

leetcode412. Fizz Buzz

寫一個程序,輸出從 1 到 n 數字的字符串表示。 1. 如果 n 是3的倍數,輸出“Fizz”; 2. 如果 n 是5的倍數,輸出“Buzz”; 3.如果 n 同時是3和5的倍數,輸出 “FizzBuzz”。 示例: n 15, 返…

leetcode359. 日志速率限制器

請你設計一個日志系統,可以流式接收日志以及它的時間戳。 該日志會被打印出來,需要滿足一個條件:當且僅當日志內容 在過去的 10 秒鐘內沒有被打印過。 給你一條日志的內容和它的時間戳(粒度為秒級),如果這…

怎樣提高WebService性能大數據量網絡傳輸處理(轉)

1. 直接返回DataSet對象 特點:通常組件化的處理機制,不加任何修飾及 處理; 優點:代碼精減、易于處理,小數據量處理較快; 缺點:大數據量的傳遞處理慢,消耗網絡資源; 建議&…

【中國互聯網江湖30年歷史】再無風清揚,再有少年郎

0 馬云退了。 在蕭山奧體中心,無數阿里人的祝福中,流著眼淚,結束了自己在阿里的最后一天。 從此互聯網江湖再無風清揚,反而多了一個叫做馬云的鄉村教師。 他臨別一揮手,似乎帶走了中國互聯網的一個時代。 20年浮沉&…

互聯網30年,泡沫如夢

人人都說互聯網改變世界,這話沒錯。 但我認為互聯網改變的方式,是泡沫。 資金,資源,人才因為一堆概念聚在一起,形成一個又一個的泡沫,然后泡沫破裂,大部分人失敗,少數能夠留下來的&a…

cpp知識匯總(1) 指針vs引用、static、const

引用和指針的區別? 指針是一個實體,需要分配內存空間。引用只是變量的別名,不需要分配內存空間。引用在定義的時候必須進行初始化,并且不能夠改變。指針在定義的時候不一定要初始化,并且指向的空間可變。(…

【精品計劃 附錄2】- 算法分析

數學模型 1. 近似2. 增長數量級3. 內循環4. 成本模型 注意事項 1. 大常數2. 緩存3. 對最壞情況下的性能的保證4. 隨機化算法5. 均攤分析 ThreeSum 1. ThreeSumSlow2. ThreeSumBinarySearch3. ThreeSumTwoPointer 倍率實驗 數學模型 1. 近似 N3/6-N2/2N/3 ~ N3/6。使用 ~f(N) …