<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>程式語言 on Quietbo</title><link>https://quietbo.com/categories/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/</link><description>Recent content in 程式語言 on Quietbo</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><lastBuildDate>Mon, 09 Jan 2023 15:13:00 +0000</lastBuildDate><atom:link href="https://quietbo.com/categories/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/index.xml" rel="self" type="application/rss+xml"/><item><title>[Python] 與MongoDB連接(並使用GUI:Studio 3T)</title><link>https://quietbo.com/2023/01/09/python-%E8%88%87mongodb%E9%80%A3%E6%8E%A5%E4%B8%A6%E4%BD%BF%E7%94%A8guistudio-3t/</link><pubDate>Mon, 09 Jan 2023 15:13:00 +0000</pubDate><guid>https://quietbo.com/2023/01/09/python-%E8%88%87mongodb%E9%80%A3%E6%8E%A5%E4%B8%A6%E4%BD%BF%E7%94%A8guistudio-3t/</guid><description>&lt;p&gt;本篇使用虛擬機VMware安裝ubuntu20.04，並安裝docker。&lt;br&gt;
Windows使用GUI &lt;a class="link" href="https://studio3t.com/" target="_blank" rel="noopener"
 &gt;Studio 3T&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;請自行先安裝VMware、ubuntu、docker及Studio 3T。&lt;/p&gt;
&lt;div id="ez-toc-container" class="ez-toc-v2_0_82_2 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction"&gt;
 &lt;div class="ez-toc-title-container"&gt;
 &lt;p class="ez-toc-title" style="cursor:inherit"&gt;
 Table of Contents
 &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&amp;quot;ez-toc-title-toggle&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle&amp;quot; aria-label=&amp;quot;顯示/隱藏內容目錄&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;ez-toc-js-icon-con&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;eztoc-hide&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;Toggle&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;ez-toc-icon-toggle-span&amp;quot;&amp;gt;&amp;lt;svg style=&amp;quot;fill: #999;color:#999&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; class=&amp;quot;list-377408&amp;quot; width=&amp;quot;20px&amp;quot; height=&amp;quot;20px&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z&amp;quot; fill=&amp;quot;currentColor&amp;quot;&amp;gt;&amp;lt;/path&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;svg style=&amp;quot;fill: #999;color:#999&amp;quot; class=&amp;quot;arrow-unsorted-368013&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;10px&amp;quot; height=&amp;quot;10px&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; version=&amp;quot;1.2&amp;quot; baseProfile=&amp;quot;tiny&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;&lt;nav&gt;
 &lt;ul class='ez-toc-list ez-toc-list-level-1 ' &gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-1" href="https://quietbo.com/2023/01/09/python-%e8%88%87mongodb%e9%80%a3%e6%8e%a5%e4%b8%a6%e4%bd%bf%e7%94%a8guistudio-3t/#ubuntu%E5%AE%89%E8%A3%9Ddocker_mongodb" &gt;ubuntu安裝docker mongodb&lt;/a&gt;
 &lt;/li&gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-2" href="https://quietbo.com/2023/01/09/python-%e8%88%87mongodb%e9%80%a3%e6%8e%a5%e4%b8%a6%e4%bd%bf%e7%94%a8guistudio-3t/#%E6%9F%A5%E8%A9%A2%E8%A9%B2ubuntu%E7%9A%84IP%E4%BD%8D%E5%9D%80" &gt;查詢該ubuntu的IP位址&lt;/a&gt;
 &lt;/li&gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-3" href="https://quietbo.com/2023/01/09/python-%e8%88%87mongodb%e9%80%a3%e6%8e%a5%e4%b8%a6%e4%bd%bf%e7%94%a8guistudio-3t/#Windows%E5%AE%89%E8%A3%9DStudio_3T" &gt;Windows安裝Studio 3T&lt;/a&gt;
 &lt;/li&gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-4" href="https://quietbo.com/2023/01/09/python-%e8%88%87mongodb%e9%80%a3%e6%8e%a5%e4%b8%a6%e4%bd%bf%e7%94%a8guistudio-3t/#%E5%A6%82%E4%BD%95%E9%80%B2%E5%85%A5docker%E5%85%A7%E7%9A%84mongodb" &gt;如何進入docker內的mongodb?&lt;/a&gt;
 &lt;/li&gt;
 &lt;/ul&gt;&lt;/nav&gt;
&lt;/div&gt;
&lt;h2 id="ubuntu安裝docker-mongodb"&gt;&lt;span class="ez-toc-section" id="ubuntu%E5%AE%89%E8%A3%9Ddocker_mongodb"&gt;&lt;/span&gt;ubuntu安裝docker mongodb&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;下載image&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="docker" class="language-docker"&gt;docker pull mongo:latest&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;啟動容器&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="docker" class="language-docker"&gt;docker run --name mongo -v /d/tmp/mongo/data:/data/db -d -p 27017:27017 mongo:latest&lt;/code&gt;&lt;/pre&gt;
&lt;ul class="wp-block-list"&gt;
 &lt;li&gt;
 &amp;#8211;name 指定建起來的container名字
 &lt;/li&gt;
 &lt;li&gt;
 -v 連結local端目錄與container目錄 (像Linux中mount共用空間的概念)
 &lt;/li&gt;
 &lt;li&gt;
 -d 背景執行
 &lt;/li&gt;
 &lt;li&gt;
 -p 指定將docker內的27017 port 與本地端(ubuntu)的27017 port連結在一起，這樣就可以透過本地直接連container了
 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;若ubuntu重新啟動發現容器沒有up是正常的，只要在重新使用start就可以起來了，&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;docker ps -a
docker start {CONTAINER_ID}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;範例:docker start 242c45f0ab65&lt;br&gt;
up正常為下圖:&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/2loo39c.png" alt="" /&gt;&lt;/p&gt;
&lt;h2 id="查詢該ubuntu的ip位址"&gt;&lt;span class="ez-toc-section" id="%E6%9F%A5%E8%A9%A2%E8%A9%B2ubuntu%E7%9A%84IP%E4%BD%8D%E5%9D%80"&gt;&lt;/span&gt;查詢該ubuntu的IP位址&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;右上角網路資訊點進去到這頁面會看到ubnutu的ip&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/mtAd6ZL.png" alt="" /&gt;&lt;/p&gt;
&lt;h2 id="windows安裝studio-3t"&gt;&lt;span class="ez-toc-section" id="Windows%E5%AE%89%E8%A3%9DStudio_3T"&gt;&lt;/span&gt;Windows安裝Studio 3T&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;GUI &lt;a class="link" href="https://studio3t.com/" target="_blank" rel="noopener"
 &gt;Studio 3T&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;設置與ubuntu內的mongodb&lt;/p&gt;
&lt;p&gt;點Connect建立New Connect。&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/Uz82ZC5.png" alt="" /&gt;&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/xSPR4yk.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;成功會出現下圖&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/oAkMC9W.png" alt="" /&gt;&lt;/p&gt;
&lt;h2 id="如何進入docker內的mongodb"&gt;&lt;span class="ez-toc-section" id="%E5%A6%82%E4%BD%95%E9%80%B2%E5%85%A5docker%E5%85%A7%E7%9A%84mongodb"&gt;&lt;/span&gt;如何進入docker內的mongodb?&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;ol class="wp-block-list"&gt;
 &lt;li&gt;
 進入容器，指令:docker exec -it 容器ID bash
 &lt;/li&gt;
 &lt;li&gt;
 進入容器後輸入:mongosh
 &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下圖為成功進入docker內的mongodb&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/JKKB3re.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;補充&lt;br&gt;
如果沒連上可能是ubuntu 27017的port沒有分享出來。&lt;/p&gt;</description></item><item><title>[Golang] Gin &amp; Goland &amp; go.mod 快速建立</title><link>https://quietbo.com/2022/10/26/golang-gin-goland-go-mod-%E5%BF%AB%E9%80%9F%E5%BB%BA%E7%AB%8B/</link><pubDate>Tue, 25 Oct 2022 17:49:24 +0000</pubDate><guid>https://quietbo.com/2022/10/26/golang-gin-goland-go-mod-%E5%BF%AB%E9%80%9F%E5%BB%BA%E7%AB%8B/</guid><description>&lt;p&gt;打開Goland後main.go檔內複製下方的Code:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="go" class="language-go line-numbers"&gt;package main

import (
 "github.com/gin-gonic/gin"
)
func main() {
 app := gin.Default()
 app.GET("/hello/:name", func(c *gin.Context) {
 name := c.Param("name")
 c.JSON(200, gin.H{
 "message": "hello " + name,
 })
 })
 err := app.Run(":8080")
 if err != nil {
 panic(err)
 }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;會看到很多紅字如下圖&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/CaqIcVr.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;打開Goland的file -&amp;gt; settings -&amp;gt; Go Modules -&amp;gt;&lt;br&gt;
將Enable Go modules integration打勾&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/CCEOu0Z.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;再Goland下方打開terminal，輸入&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash line-numbers"&gt;$ go mod init [project_name]
$ go mod tidy&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/pn7NIKz.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;此時的go.mod會自動下載&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;module do_gowork

go 1.19

require github.com/gin-gonic/gin v1.8.1

require (
 github.com/gin-contrib/sse v0.1.0 // indirect
 github.com/go-playground/locales v0.14.0 // indirect
 github.com/go-playground/universal-translator v0.18.0 // indirect
 github.com/go-playground/validator/v10 v10.10.0 // indirect
 github.com/goccy/go-json v0.9.7 // indirect
 github.com/json-iterator/go v1.1.12 // indirect
 github.com/leodido/go-urn v1.2.1 // indirect
 github.com/mattn/go-isatty v0.0.14 // indirect
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
 github.com/modern-go/reflect2 v1.0.2 // indirect
 github.com/pelletier/go-toml/v2 v2.0.1 // indirect
 github.com/ugorji/go/codec v1.2.7 // indirect
 golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 // indirect
 golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 // indirect
 golang.org/x/text v0.3.6 // indirect
 google.golang.org/protobuf v1.28.0 // indirect
 gopkg.in/yaml.v2 v2.4.0 // indirect
)&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/AE6i33f.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;注意，go mod tidy有移除「沒使用的依賴這功能」，實際上是需要使用來取得library。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;go get [library]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;空白處點選右鍵，Run ‘go build main.go’&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/fw3ni1J.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;執行成功可看到下面這些訊息&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env: export GIN_MODE=release
 - using code: gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET /hello/:name --&amp;gt; main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8080&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;打開瀏覽器輸入:&lt;br&gt;
http://127.0.0.1:8080/hello/world&lt;/p&gt;
&lt;p&gt;{“message”:”hello world”}&lt;/p&gt;</description></item><item><title>[基礎]命名規則</title><link>https://quietbo.com/2021/10/06/%E5%9F%BA%E7%A4%8E%E5%91%BD%E5%90%8D%E8%A6%8F%E5%89%87/</link><pubDate>Wed, 06 Oct 2021 06:44:00 +0000</pubDate><guid>https://quietbo.com/2021/10/06/%E5%9F%BA%E7%A4%8E%E5%91%BD%E5%90%8D%E8%A6%8F%E5%89%87/</guid><description>&lt;p&gt;剛出來寫程式，還是一張超級白紙時，覺得命名就是讓人看得懂變數就好啦~現在好想回頭揍自己 ಠ▃ಠ&lt;/p&gt;
&lt;p&gt;命名有兩個關鍵是:&lt;/p&gt;
&lt;ol class="wp-block-list"&gt;
 &lt;li&gt;
 可讀性
 &lt;/li&gt;
 &lt;li&gt;
 一致性
 &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Snake Case, Pascal Case, Camel Case 這三種是較常被採用的命名方式，像像在目前專案上，變數則是使用Snake Case，但在Function則使用Pascal或Camel Case&lt;/p&gt;
&lt;div id="ez-toc-container" class="ez-toc-v2_0_82_2 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction"&gt;
 &lt;div class="ez-toc-title-container"&gt;
 &lt;p class="ez-toc-title" style="cursor:inherit"&gt;
 Table of Contents
 &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&amp;quot;ez-toc-title-toggle&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle&amp;quot; aria-label=&amp;quot;顯示/隱藏內容目錄&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;ez-toc-js-icon-con&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;eztoc-hide&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;Toggle&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;ez-toc-icon-toggle-span&amp;quot;&amp;gt;&amp;lt;svg style=&amp;quot;fill: #999;color:#999&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; class=&amp;quot;list-377408&amp;quot; width=&amp;quot;20px&amp;quot; height=&amp;quot;20px&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z&amp;quot; fill=&amp;quot;currentColor&amp;quot;&amp;gt;&amp;lt;/path&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;svg style=&amp;quot;fill: #999;color:#999&amp;quot; class=&amp;quot;arrow-unsorted-368013&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;10px&amp;quot; height=&amp;quot;10px&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; version=&amp;quot;1.2&amp;quot; baseProfile=&amp;quot;tiny&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;&lt;nav&gt;
 &lt;ul class='ez-toc-list ez-toc-list-level-1 ' &gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-1" href="https://quietbo.com/2021/10/06/%e5%9f%ba%e7%a4%8e%e5%91%bd%e5%90%8d%e8%a6%8f%e5%89%87/#Snake_Case" &gt;Snake Case&lt;/a&gt;
 &lt;/li&gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-2" href="https://quietbo.com/2021/10/06/%e5%9f%ba%e7%a4%8e%e5%91%bd%e5%90%8d%e8%a6%8f%e5%89%87/#Pascal_Case" &gt;Pascal Case&lt;/a&gt;
 &lt;/li&gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-3" href="https://quietbo.com/2021/10/06/%e5%9f%ba%e7%a4%8e%e5%91%bd%e5%90%8d%e8%a6%8f%e5%89%87/#Camel_Case%E9%A7%9D%E5%B3%B0%E5%BC%8F" &gt;Camel Case(駝峰式)&lt;/a&gt;
 &lt;/li&gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-4" href="https://quietbo.com/2021/10/06/%e5%9f%ba%e7%a4%8e%e5%91%bd%e5%90%8d%e8%a6%8f%e5%89%87/#Kebab_Case" &gt;Kebab Case&lt;/a&gt;
 &lt;/li&gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-5" href="https://quietbo.com/2021/10/06/%e5%9f%ba%e7%a4%8e%e5%91%bd%e5%90%8d%e8%a6%8f%e5%89%87/#Screaming_Case" &gt;Screaming Case&lt;/a&gt;
 &lt;/li&gt;
 &lt;/ul&gt;&lt;/nav&gt;
&lt;/div&gt;
&lt;h2 id="snake-case"&gt;&lt;span class="ez-toc-section" id="Snake_Case"&gt;&lt;/span&gt;Snake Case&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;單字皆為小寫，單字以底線_分離。例如:user_name&lt;/p&gt;
&lt;h2 id="pascal-case"&gt;&lt;span class="ez-toc-section" id="Pascal_Case"&gt;&lt;/span&gt;Pascal Case&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;跟 Camel Case 類似，只是第一個字要大寫。例如:UserName&lt;/p&gt;
&lt;h2 id="camel-case駝峰式"&gt;&lt;span class="ez-toc-section" id="Camel_Case%E9%A7%9D%E5%B3%B0%E5%BC%8F"&gt;&lt;/span&gt;Camel Case(駝峰式)&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;第一個字母為小寫，之後每一個單字的開頭為大寫，不包含空格。&lt;br&gt;
例如:userName&lt;/p&gt;
&lt;h2 id="kebab-case"&gt;&lt;span class="ez-toc-section" id="Kebab_Case"&gt;&lt;/span&gt;Kebab Case&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;跟Snake Case類似，單字以減號-分離。例如:user-name&lt;br&gt;
較常在html裡面的class、div、id看到&lt;/p&gt;
&lt;h2 id="screaming-case"&gt;&lt;span class="ez-toc-section" id="Screaming_Case"&gt;&lt;/span&gt;Screaming Case&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;跟Snake Case類似，單字皆為全大寫。例如:PROJECT_NAME&lt;br&gt;
常用地方:全域變數或設定檔內的變數。&lt;/p&gt;
&lt;p&gt;我在取名字會盡量保持幾個原則&lt;/p&gt;
&lt;ul class="wp-block-list"&gt;
 &lt;li&gt;
 不超過40個字
 &lt;/li&gt;
 &lt;li&gt;
 不使用羅馬拼音(例如Jiancha，唸法就同檢查)
 &lt;/li&gt;
 &lt;li&gt;
 使用有意義或公認的英文縮寫
 &lt;/li&gt;
 &lt;li&gt;
 變數使用名詞或形容詞，有關function或操作的使用動詞
 &lt;/li&gt;
 &lt;li&gt;
 選擇好溝通的英文
 &lt;/li&gt;
 &lt;li&gt;
 好搜索，例如id，就加個user_id或admin_id，不然用id搜尋整個專案，出來可能會有上千個id…
 &lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>[C#] @、$及@$的字串處理(必學)</title><link>https://quietbo.com/2021/06/24/c-%E3%80%81%E5%8F%8A%E7%9A%84%E5%AD%97%E4%B8%B2%E8%99%95%E7%90%86%E5%BF%85%E5%AD%B8/</link><pubDate>Wed, 23 Jun 2021 18:26:45 +0000</pubDate><guid>https://quietbo.com/2021/06/24/c-%E3%80%81%E5%8F%8A%E7%9A%84%E5%AD%97%E4%B8%B2%E8%99%95%E7%90%86%E5%BF%85%E5%AD%B8/</guid><description>&lt;p&gt;最近新專案進來，從Python轉到C#了，一切來的太突然，因為不是很熟悉C#，所以在這做些筆記，也方便分享給其他同事，一起學習C#。&lt;/p&gt;
&lt;p&gt;符號:@&lt;br&gt;
用途:加在字串前面，表示其中的轉義字元不被處理，也可換行。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="csharp" class="language-csharp line-numbers"&gt;string a = "hello \t world";
string b = @"hello \t world";
string c = "today is \"Sunday\"";
string d = @"today is ""Sunday""";
string e = "https:\\\\localhost\\user\\name.txt";
string f = @"https:\\localhost\user\name.txt";
string g = "AAA\r\nBBB\r\nCCC";
string h = @"
AAAA
BBBB
CCCC";&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;顯示如下:&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/6u5UR8t.png" alt="" /&gt;&lt;/p&gt;
&lt;blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"&gt;
 &lt;p&gt;
 如果使用@的話，編譯時會自動上\r\n\t。像h輸出就是自動加換行的結果。&lt;br /&gt;此處注意的是:顯示一個雙引號的話，需要像d寫法一樣，使用2個雙引號&amp;#8221;&amp;#8221;才會當作1個雙引號&amp;#8221;
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;符號:$&lt;br&gt;
用途:使用String.Format將指定的變數名稱帶入字串中。&lt;br&gt;
其實就是:字串輸出格式。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="csharp" class="language-csharp line-numbers"&gt;string a = "hello world";
string b = @"today is ""Sunday""";
string c = @"https:\\localhost\user\name.txt";


string i = $"{a} {b} URL:{c}";
Console.WriteLine(i);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;輸出:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;hello world today is "Sunday" URL:https:\\localhost\user\name.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;符號:$@(或@$)&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="csharp" class="language-csharp line-numbers"&gt;string a = "hello world";
string b = @"today is ""Sunday""";
string c = @"https:\\localhost\user\name.txt";

string i = $@"{a} 
{b} 
URL:{c}";

Console.WriteLine(i);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;輸出結果:&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/CNKTZro.png" alt="" /&gt;&lt;/p&gt;</description></item><item><title>[Python]字串轉型態ast.literal_eval，且為什麼不建議eval(必學)</title><link>https://quietbo.com/2021/06/03/python-%E5%AD%97%E4%B8%B2%E8%BD%89%E5%9E%8B%E6%85%8Bast-literal_eval%EF%BC%8C%E4%B8%94%E7%82%BA%E4%BB%80%E9%BA%BC%E4%B8%8D%E5%BB%BA%E8%AD%B0eval%E5%BF%85%E5%AD%B8/</link><pubDate>Thu, 03 Jun 2021 09:40:06 +0000</pubDate><guid>https://quietbo.com/2021/06/03/python-%E5%AD%97%E4%B8%B2%E8%BD%89%E5%9E%8B%E6%85%8Bast-literal_eval%EF%BC%8C%E4%B8%94%E7%82%BA%E4%BB%80%E9%BA%BC%E4%B8%8D%E5%BB%BA%E8%AD%B0eval%E5%BF%85%E5%AD%B8/</guid><description>&lt;p&gt;三分鐘學習一個小知識，還有範例直接看!&lt;/p&gt;
&lt;p&gt;當python在做型態轉換，str轉dict、list、tuple、set或是int時，有些人會使用eval 或 ast.literal_eval，但eval是不推的，安全性是其中重要的原因。&lt;br&gt;
若要單純轉換型態，我。&lt;/p&gt;
&lt;p&gt;稍微講一下eval會說是危險原因:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="python" class="language-python line-numbers"&gt;# coding:utf-8

"""
輸入下方指令:
"1000"
"1+3"
"[0, 1, [2, 2]]"
"(1, 3, 5, [7])"
"{'A': 'aa', 'B': 'bb', 'C': 'cc'}"
"__import__('os').system('ls /')"
"""
std = input('please input: ')
eval_std = eval(std)
print('input: ',eval_std, type(eval_std))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上5種輸入，下方為輸出結果:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;input: 1000 &amp;lt;type 'int'&amp;gt;
input: 4 &amp;lt;type 'int'&amp;gt;
input: [0, 1, [2, 2]] &amp;lt;type 'list'&amp;gt;
input: (1, 3, 5, [7]) &amp;lt;type 'tuple'&amp;gt;
input: {'A': 'aa', 'C': 'cc', 'B': 'bb'} &amp;lt;type 'dict'&amp;gt;

bin boot cdrom dev etc home lib lib32 lib64 libx32 lost+found media mnt opt proc root run sbin snap srv swapfile sys tmp usr var VBox.log
input: 0 &amp;lt;type 'int'&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;eval 不只是可以轉型態、將輸入做處理，甚至系統的命令都能執行!&lt;br&gt;
如果今天(使用者)輸入的內容是輸入刪除文件、顯示目錄結構等命令，那是很大的危險，所以要轉型態是不建議使用eval的!(本篇不介紹惡意操作的指令有哪些)&lt;/p&gt;
&lt;p&gt;使用下方程式:ast.literal_eval&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="python" class="language-python line-numbers"&gt;# coding:utf-8
import ast

"""
輸入下方指令:
"1000"
"1+3" # 會報錯
"[0, 1, [2, 2]]"
"(1, 3, 5, [7])"
"{'A': 'aa', 'B': 'bb', 'C': 'cc'}"
"__import__('os').system('ls /')" # 會報錯
"""
std = input('please input: ')
ast_std = ast.literal_eval(std)
print('input: %s %s'% (ast_std, type(ast_std)))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ast.literal_eval會去判斷要解析的內容是否安全，不安全就報錯，我們只要處理報錯的處理就好，比起找回刪除的檔案或是被偷的資料，這輕鬆多了。&lt;/p&gt;
&lt;p&gt;結論:字符串進行類型轉換，一律用ast.literal_eval()&lt;/p&gt;
&lt;p&gt;連結:&lt;a class="link" href="https://docs.python.org/2/library/ast.html" target="_blank" rel="noopener"
 &gt;python document&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Python]實現php serialize函數</title><link>https://quietbo.com/2021/04/28/python%E5%AF%A6%E7%8F%BEphp-serialize%E5%87%BD%E6%95%B8/</link><pubDate>Wed, 28 Apr 2021 08:50:46 +0000</pubDate><guid>https://quietbo.com/2021/04/28/python%E5%AF%A6%E7%8F%BEphp-serialize%E5%87%BD%E6%95%B8/</guid><description>&lt;p&gt;不同的程式語言之間物件的傳遞，就必須把物件序列化為標準格式，比如XML，但更好的方法是序列化為JSON，因為JSON表示出來就是一個字串，可以被所有語言讀取，也可以方便地儲存到磁碟或者通過網路傳輸。&lt;/p&gt;
&lt;p&gt;舉例A公司用php撰寫後序列化(物件轉字串)傳送到B公司，而B公司用Python反序列化時要用到。&lt;br&gt;
通常是用在Python編程環境和PHP編程環境，相互之間需要&lt;code&gt;進行數據交換&lt;/code&gt;時。&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/NTe1vwR.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;pip3 install phpserialize&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;導入庫：&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;import phpserialize&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;利用dumps 進行序列化（物件轉字串）：&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;phpserialize.dumps(vary)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用loads 進行反序列化（字串轉物件）：&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;phpserialize.loads(formated_string)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a class="link" href="https://blog.csdn.net/whatday/article/details/106987049" target="_blank" rel="noopener"
 &gt;來源1&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>