日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于golang的append函数的踩坑

發布時間:2023/11/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于golang的append函数的踩坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 從LeetCode第26題產生的疑問
    • 測試代碼
  • LeetCode22
  • 解決方式
    • 原題
    • 例2 LeetCode189
  • copy的值復制

從LeetCode第26題產生的疑問

這篇文章里面提到了關于在函數內部修改數據的情況。但是LeetCode22題中發現append無法在傳送變量中進行append。

測試代碼

輸出結果
[123 456 7] //使用test函數append數字8,但是并沒有修改原數據的值
[1 2 3] //同理,只可以在main函數append成功
[1 2 4] //但是可以修改數據的值,append失效的原因待查

package mainimport "fmt"func main() {nums := []string{}nums = append(nums, "123")nums = append(nums, "456")nums = append(nums, "7")test(nums)fmt.Println(nums)num := []int{}num = append(num, 1)num = append(num, 2)num = append(num, 3)fmt.Println(num)test1(num)fmt.Println(num) }func test1(num []int) {// append無法更改值。num = append(num, 4)num[2] = 4 }func test(nums []string) {nums = append(nums, "8") }

LeetCode22

在做這個題其中nums = append(nums, s),將所有符合條件的結果存儲在nums中,但是return之后nums為空,發現nums無法修改數據的值

package mainimport "fmt"func generateParenthesis(n int) []string {nums := make([]string, 0)generate("",nums, n, n)return nums }func generate(s string, nums []string, left int,right int ) {if left == 0 && right == 0 {nums = append(nums, s)return}if left > 0 {generate(s + "(", nums, left - 1, right)}if right > left {generate(s + ")", nums, left, right - 1)} }func main(){x := generateParenthesis(2)fmt.Println(x) }

解決方式

func main() {nums := []string{}nums = append(nums, "123")nums = append(nums, "456")nums = append(nums, "7")test(&nums)fmt.Println(nums) }func test(nums *[]string) {*nums = append(*nums, "8") }

原題

https://blog.csdn.net/csdn_kou/article/details/104307631
為什么返回數值是整數,但輸出的答案是數組呢?

請注意,輸入數組是以“引用”方式傳遞的,這意味著在函數里修改輸入數組對于調用者是可見的。

你可以想象內部操作如下:

// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝
int len = removeDuplicates(nums);

// 在函數里修改輸入數組對于調用者是可見的。
// 根據你的函數返回的長度, 它會打印出數組中該長度范圍內的所有元素。

例2 LeetCode189

https://leetcode-cn.com/problems/rotate-array
append 拼接過程中重新創建了底層數組,導致函數中的 nums 不再是函數外的 nums,引用失效。
其實也證明go中沒有引用類型,因為go不存在引用賦值
測試代碼

package mainimport "fmt"func rotate(nums []int, k int) {tx := &numste := reverse(&nums,k)*tx = tefmt.Println("2", nums) }func reverse(nums *[]int, k int) []int{*nums = append(*nums, 8)return *nums }func main(){nums := []int{1,2,3,4,5,6,7}rotate(nums, 3)fmt.Println("1", nums) }

189題使用這樣的方式改變了數組的值

func rotate(nums []int, k int) {k %= len(nums)ans := append(nums[len(nums)-k:], nums[:len(nums)-k]...)nums = append(nums[:0], ans...) }

測試是否可以改變原數組。這個小細節可以記一下

package mainimport "fmt"func t(nums []int) {// 1 Right//ans := append(nums[:2], nums[1])//nums = append(nums[:0], ans...)// 2 Right//ans := append(nums[:2], 1)//nums = append(nums[:0], ans...)// 3 False//ans := append(nums, 1)//nums = append(nums[:0], ans...)// 4 Right//ans := append(nums[:len(nums)-1], 1)//nums = append(nums[:0], ans...)// 5 Right//ans := append(nums[:1], 1)//nums = append(nums[:0], ans...)// 6 Falseans := append(nums[:0], 1)nums = append(nums[:0], ans...) }func main() {nums := []int {1,2,3}t(nums)fmt.Println(nums) }

copy的值復制

package mainimport "fmt"func test() {temp := [][]int {{1,2,3},{2,3}}nums := []int {999}fmt.Println("temp_init", temp)temp = append(temp, nums)fmt.Println("temp_append_nums", temp)nums[0] = 11111//temp [[1 2 3] [2 3]]//temp [[1 2 3] [2 3] [999]]//temp [[1 2 3] [2 3] [11111]]//可以看到append不是值拷貝,如果只想值拷貝使用copy函數fmt.Println("temp_change_nums_print_temp", temp)fmt.Println(nums) } func main() {temp := [][]int {{1,2,3},{2,3}}nums := []int {999}fmt.Println("temp_init", temp)r := make([]int, len(nums))copy(r, nums)temp = append(temp, r)fmt.Println("temp_append_nums", temp)nums[0] = 11111fmt.Println("temp_change_nums_print_temp", temp)fmt.Println(nums) }

總結

以上是生活随笔為你收集整理的关于golang的append函数的踩坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久亚洲av成人无码国产电影 | 黄色片网站在线观看 | 欧美日韩成人一区二区 | 久久亚洲a v | 99精品在线视频观看 | 男人的天堂av片 | www.久久精品.com | 色网站在线看 | av基地网| 色91精品久久久久久久久 | 丁香花高清视频完整电影 | 成人亚洲玉足脚交系列 | 午夜精品视频在线观看 | 亚洲破处视频 | 国产二区视频在线观看 | 操网| 国语播放老妇呻吟对白 | 免费观看色| 日韩一区二区三区在线免费观看 | www.久久久久久久 | 久久三级精品 | 91视频在线免费观看 | 91在线网站| 国产极品美女高潮无套嗷嗷叫酒店 | 性毛片| 欧美在线视频观看 | 精品人妻一区二区三区在线视频 | 亚洲欧美日韩在线看 | 97精品人妻一区二区三区 | 欧美日韩精品一区二区三区视频播放 | 图片区小说区视频区 | 国产a级免费视频 | 欧美黑人精品一区二区不卡 | 特级淫片aaaaaaa级附近的 | www.黄色网址.com | 一本久久a精品一合区久久久 | 国产日韩欧美在线观看 | 孕妇丨91丨九色 | 东京热av一区 | 国产精品无码久久久久久 | 在线视频麻豆 | 99国产精品免费视频 | 日本少妇激情 | 激情小说欧美色图 | 婷婷激情影院 | 精品999视频 | 九色91| 日本在线播放一区 | 青草青在线视频 | 亚洲激情网| 91视频免费在线 | 亚洲精品二区 | 打屁屁日本xxxxx变态 | 久久久久久久久久99精品 | 97精品在线视频 | 成人久久18免费网站图片 | 91国自产精品中文字幕亚洲 | 一级精品视频 | 久色精品视频 | 午夜影音| 中文字幕成人在线视频 | www.色啪啪.com | 日韩欧美亚洲成人 | 久久久精品久久久久 | 91porn在线| 淫视频在线观看 | 久久亚洲精品国产精品黑人v | 在线日韩三级 | 成人a网站| 人人射人人干 | 插插看 | 国产高清成人久久 | 久久久久免费视频 | 国产资源在线观看 | 欧美黄色成人 | 色激情网 | 日日干天天操 | 免费视频毛片 | 五月综合在线 | 四虎8848精品成人免费网站 | 日韩一级黄色大片 | 午夜视频久久久 | 毛片91 | 亚洲免费在线观看视频 | 一曲二曲三曲在线观看中文字幕动漫 | jizz中国女人高潮 | 免费观看久久 | 国产精品一区视频 | 亚洲蜜桃精久久久久久久久久久久 | 亚洲无人区码一码二码三码 | 亚洲三级视频 | 91av在线视频观看 | 成人音影 | 欧美亚洲视频 | 激情亚洲 | 91在线免费看 | 亚洲a级精品 | 免费看裸体视频网站 | 亚洲国产视频一区二区三区 |